package com.shgsh.attribute.service;

import com.shgsh.common.repository.CURDRepository;
import com.shgsh.common.util.DataTable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;

/**
 * Created by Evelyn on 2015/8/20.
 */
@Service
public class AttributeDataService {
    Logger logger = LoggerFactory.getLogger(TestService.class);

    @Autowired
    CURDRepository curdRepository;

    /**
     * 根据属性名获得其初始值
     *
     * @param attributeName（如：kindly）
     * @return （如："5000"）
     */
    public String getAttrInitValue(String attributeName) {
        logger.debug("getAttrInitValue:" + attributeName);
        ArrayList<byte[]> params = new ArrayList<>();
        params.add(DataTable.ATTR_INITIAL_DATA.getBytes());
        params.add(attributeName.getBytes());
        String str = curdRepository.hget(params);
        return str;
    }

    /**
     * 设置属性名的初始值
     *
     * @param attributeName（如：kindly）
     * @return （如："5000"）
     */
    public void setAttrInitValue(String attributeName, String value) {
        logger.debug("setAttrInitValue:" + attributeName + "  " + value);
        ArrayList<byte[]> params = new ArrayList<>();
        params.add(DataTable.ATTR_INITIAL_DATA.getBytes());
        params.add(attributeName.getBytes());
        params.add(value.getBytes());
        curdRepository.hset(params);
    }


    /**
     * 用户属性修改次数加1
     *
     * @param usrId
     */
    public void attrModifyCountAdd1(String usrId) {
        logger.debug("attrModifyCountAdd1:" + usrId);
        ArrayList<byte[]> params = new ArrayList<>();
        params.add(DataTable.ATTR_USER_CHANGE.getBytes());
        params.add(usrId.getBytes());
        String count = curdRepository.hget(params);
        logger.debug("count:" + count);
        if (count == null) {
            count = "0";
        } else {
            count = (Integer.parseInt(count) + 1) + "";
        }
        params.add(count.getBytes());
        curdRepository.hset(params);
        return;
    }

    /**
     * 根据属性名获取其对应的表名
     *
     * @param属性名 （如:kindly）
     * @return属性对应的表名 （如：attr_kindly_data）
     */
    public String getTableNameByAttr(String attributeName) {
        return "attr_" + attributeName + "_data";
    }


    /**
     * 给某个用户初始化某个属性的值
     *
     * @param userId
     * @param attributeName
     */
    public void initUserAttrValue(String userId, String attributeName) {
        logger.debug("initUserAttrValue:" + userId + " " + attributeName);
        ArrayList<byte[]> params = new ArrayList<>();
        params.add(getTableNameByAttr(attributeName).getBytes());
        params.add(userId.getBytes());
        params.add(getAttrInitValue(attributeName).getBytes());
        curdRepository.hset(params);
    }

    /**
     * 给某个用户初始化所有属性的值
     *
     * @param userId
     */
    public void initAllAttrForUser(String userId) {
        for (String attr : DataTable.ATTR_ARRAY) {
            initUserAttrValue(userId, attr);
        }
        attrModifyCountAdd1(userId);
    }


    public void setInitAttrValue(String value) {
        for (String attr : DataTable.ATTR_ARRAY) {
            setAttrInitValue(attr, value);
        }
    }


}
